// 这里存放vuex的核心代码
import Vue from 'vue'
import vuex from 'vuex'
import user from './modules/user'
import setting from './modules/setting'

// 插件安装
Vue.use(vuex)

// 创建仓库
const store = new vuex.Store({
  // 开启严格模式
  strict: true,
  // 1.通过state可以提供数据
  state: {
    title: '仓库大标题',
    count: 100,
    list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
  },
  // 2.通过mutation函数可以修改数据的方法
  mutations: {
    addCount (state, obj) {
      // 修改数据
      // 注意点，mutation函数的参数只能有一个，要传多个只能传数组或者对象
      state.count += obj.count
    },
    subCount (state, n) {
      state.count -= n
    },
    changeTitle (state, newTitle) {
      state.title = newTitle
    },
    changeCount (state, n) {
      state.count = n
    }
  },

  // 3. actions处理异步
  actions: {
    changeCountAction (context, num) {
      setTimeout(() => {
        context.commit('changeCount', num)
      }, 1000)
    }
  },

  // 4. getter类似于计算属性
  getters: {
    filterList (state) {
      return state.list.filter(item => item > 5)
    }
  },

  // 5.modules
  modules: {
    user,
    setting
  }

})

// 导出
export default store
